package com.codegen.entity;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnore;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.WordUtils;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
 * @author LZCXTECH06
 * @date 2019年8月28日
 */
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class TableField extends Field {

    /**
     * 字段长度（数据库中的长度）
     */
    private Integer length;
    /**
     * 字段长度（数据库中的精度）
     */
    private Integer decimal;
    /**
     * 是否唯一索引
     */
    private boolean unique;
    /**
     * 是否主键
     */
    private boolean pk;

    /**
     * 是否可以null(数据库)
     */
    private boolean nullable;
    /**
     * 默认值（数据库默认值）
     */
    private String defaultVal;


    /**
     * 字段值对应的枚举项目
     */
    private List<FieldEnum> enums;


    /**
     * 是否是枚举字段
     *
     * @return
     */
    @JsonIgnore
    public boolean isEnumField() {
        return CollectionUtils.isNotEmpty(enums);
    }

    /**
     * 获取枚举字段对应的类型
     *
     * @return
     */
    @JsonIgnore
    public String getEnumClassName() {
        return StringUtils.capitalize(WordUtils.capitalizeFully(getName(), new char[]{'_'}).replace("_", ""));
    }

    /**
     * 列转换成Java类型名
     */
    @Override
    @JsonIgnore
    public String getJavaFieldType() {
        if (!isEnumField()) {
            return getFieldType().getJavaClass().getSimpleName();
        } else {
            return WordUtils.capitalizeFully(getName(), new char[]{'_'}).replace("_", "") + "Enum";
        }
    }
}
